﻿using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using GoDinner.Models;
using WebMatrix.WebData;

namespace GoDinner.Controllers
{
    public class GebruikersController : Controller
    {
        Models.GoDinnerDbContext _db = new Models.GoDinnerDbContext();

        [Authorize(Roles = "Admin")]
        public ActionResult OverzichtGebruikers()
        {
            var model = _db.UserProfiles.ToList();           
            
            return View(model);
        }

        [HttpGet]
        [Authorize(Roles = "Admin")]
        public ActionResult EditGebruiker(int id)
        {
            var model = _db.UserProfiles.Find(id);
            return View(model);
        }


        [HttpPost]
        [Authorize(Roles = "Admin")]
        public ActionResult EditGebruiker(UserProfile user, FormCollection fromValues)
        {
            //kijken of een gebruiker moet worden unlockt
            string locking = fromValues["selectLock"];

            MembershipUser userMem = Membership.GetUser(user.UserName);

            if (locking == "true")
                userMem.UnlockUser();


            //de gekozen rol ophalen uit het form bij editGebruiker
            string choosenRole = fromValues["selectRoles"];
            string role = "User"; //default op user zetten zodat er geen fouten gebeuren

            //string choosenRole = Request.Form["Roles"];
            if (choosenRole == "1")
                role = "Admin";
            else if (choosenRole == "2")
                role = "User";
            else
                role = "User"; //mocht er iets misgaan, de gebruiker blijft een user


            //als de gebruiker niet in de gekozen rol zit
            if (!Roles.GetRolesForUser(user.UserName).Contains(role))
            {
                //alle huidige roles opvragen waar de gebruiker inzit
                string[] alleUserRoles = Roles.GetRolesForUser(user.UserName);

                //alle huidige roles waar de gebruiker inzit verwijderen
                Roles.RemoveUserFromRoles(user.UserName, alleUserRoles);

                //gebruiker toevoegen aan de gekozen rol
                Roles.AddUserToRole(user.UserName, role);
            }

            MembershipUser userA = Membership.GetUser("Username");
            

            if (ModelState.IsValid)
            {
                _db.Entry(user).State = EntityState.Modified;
                _db.SaveChanges();
                return RedirectToAction("OverzichtGebruikers", "Gebruikers");
            }
            return View(user);
        }

    }
}
